import router from '@/router'
import store from '@/store'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css'// Progress 进度条样式
import {Message} from 'element-ui'
import {getToken} from '@/utils/auth' // 验权

// permissiom judge function
function hasPermission(roles, permissionRoles) {
    if (roles.indexOf('admin') >= 0) return true // admin permission passed directly
    if (!permissionRoles) return true
    return roles.some(role => permissionRoles.indexOf(role) >= 0)
}

const whiteList = ['/login','/tokenError','/register','/resetPwd'] // 不重定向白名单

router.beforeEach((to, from, next) => {
    NProgress.start()
    /*if (to.path === '/login') {
        next({path: '/'})
    } else {
        if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
            /!*const userData = {
                roles:['admin']
            }
            // const roles = res.data.roles // note: roles must be a array! such as: ['editor','develop']
            console.log('userData', userData)
            store.dispatch('GenerateRoutes', {userData}).then(() => { // 根据roles权限生成可访问的路由表
                console.log('addRouters', store.getters.addRouters)
                router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
                next({...to, replace: true}) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
            })*!/
            store.dispatch('GetUserInfo').then(res => { // 拉取user_info
                const userData = res.data
                // const roles = res.data.roles // note: roles must be a array! such as: ['editor','develop']
                console.log('userData', userData)
                store.dispatch('GenerateRoutes', {userData}).then(() => { // 根据roles权限生成可访问的路由表
                    console.log('addRouters', store.getters.addRouters)
                    router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
                    next({...to, replace: true}) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                })
            }).catch((err) => {
                store.dispatch('FedLogOut').then(() => {
                    Message.error(err || 'Verification failed, please login again')
                    next({path: '/'})
                })
            })
        } else {
            // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
            if (hasPermission(store.getters.roles, to.meta.roles)) {
                next()//
            } else {
                next({path: '/401', replace: true, query: {noGoBack: true}})
            }
            // 可删 ↑
        }
    }*/
    if (getToken()) {
    // if (true) {
        if (to.path === '/login') {
            next({path: '/'})
        } else {
            if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
                store.dispatch('GetUserInfo').then(res => { //代用vuex中的permission模块的action方法：GetUserInfo：  获取用户信息
                    const userData = res.data
                    // const roles = res.data.roles // note: roles must be a array! such as: ['editor','develop']
                    console.log('userData', userData)
                    store.dispatch('GenerateRoutes', {userData}).then(() => { // 根据roles权限生成可访问的路由表
                        console.log('addRouters', store.getters.addRouters)
                        router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
                        next({...to, replace: true}) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                    })
                }).catch((err) => {
                    store.dispatch('FedLogOut').then(() => {
                        Message.error(err || 'Verification failed, please login again')
                        next({path: '/'})
                    })
                })
            } else {
                // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
                if (hasPermission(store.getters.roles, to.meta.roles)) {
                    next()//
                } else {
                    next({path: '/401', replace: true, query: {noGoBack: true}})
                }
                // 可删 ↑
            }
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) {
            next()
        } else {
            next('/login')
            NProgress.done()
        }
    }
})

router.afterEach(() => {
    NProgress.done() // 结束Progress
})
